﻿using DataAccess;
using DevExpress.XtraEditors;
using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace QuanLyKhachSan
{
    public partial class FormNhanVienCapNhat : XtraForm
    {
        private readonly int _type;
        private readonly NhanVienManager _manager = new NhanVienManager();
        private readonly ChucVuManager _cvmanager = new ChucVuManager();
        public NhanVien Nhanvien;
        private ActionResult _action;
        public bool Success { get; set; }
        protected static Logger Logger = LogManager.GetCurrentClassLogger();

        public FormNhanVienCapNhat(int type)
        {
            InitializeComponent();
            _type = type;
            LoadChucVu();
        }

        public FormNhanVienCapNhat(int type,NhanVien nv)
        {
            InitializeComponent();
            _type = type;
            Nhanvien = nv;
            LoadChucVu();
            LoadNhanVien();
        }

        private void LoadNhanVien()
        {
            try
            {
                txtMaNV.Text = Nhanvien.MaNV.ToString();
                txtTenNV.Text = Nhanvien.TenNhanVien;
                txtDiachi.Text = Nhanvien.DiaChi;
                txtSoCMND.Text = Nhanvien.SCMND;
                txtTrangthai.Text = Nhanvien.TrangThai;
                txtHesoluong.Text = Nhanvien.HeSoLuong.ToString();
                cmbChucvu.SelectedValue = Nhanvien.MaCV;
                dtpNgaylamviec.Value = Nhanvien.NgayLamViec;
                if (Nhanvien.GioiTinh == true)
                    radNam.Checked = true;
                radNu.Checked = true;
            }
            catch(Exception ex)
            {
                Logger.Error(ex);
            }
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            LayDuLieu();
            var validator = _manager.Validate(Nhanvien);
            if (validator.Valid())
            {
                _action = _manager.Them(Nhanvien);
                if (!_action.Sucess())
                {
                    Logger.Info(_action.Exceptions);
                    XtraMessageBox.Show(_action.GetErrorMessage(), "Lỗi!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    Success = true;
                    Close();
                }
            }
            else
            {
                Logger.Error(validator.Message);
                XtraMessageBox.Show(validator.ToString(), "Thông báo", MessageBoxButtons.OK);
            }
        }

        private void btnCapnhat_Click(object sender, EventArgs e)
        {
            LayDuLieu();
            Nhanvien.MaNV = int.Parse(txtMaNV.Text);
            var validator = _manager.Validate(Nhanvien);
            if (validator.Valid())
            {
                _action = _manager.CapNhat(Nhanvien);
                if (!_action.Sucess())
                {
                    Logger.Info(_action.Exceptions);
                    XtraMessageBox.Show(_action.GetErrorMessage(), "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    Success = true;
                    Close();
                }
            }
            else
            {
                Logger.Error(validator.Message);
                XtraMessageBox.Show(validator.ToString(), "Thông báo", MessageBoxButtons.OK);
            }
        }

        private void LoadChucVu()
        {
            cmbChucvu.DataSource = _cvmanager.LayDanhSach().Result;
            cmbChucvu.DisplayMember = "TenCV";
            cmbChucvu.ValueMember = "MaCV";
        }

        private void FormNhanVienCapNhat_Load(object sender, EventArgs e)
        {
            if (_type == 0)
            {
                btnCapnhat.Enabled = false;
                txtMaNV.Enabled = false;
            }
            else
                btnThem.Enabled = false;
        }

        private void LayDuLieu()
        {
            Nhanvien = new NhanVien();
            try
            {
                Nhanvien.TenNhanVien = txtTenNV.Text;
                Nhanvien.DiaChi = txtDiachi.Text;
                Nhanvien.GioiTinh = radNam.Checked ? true : false;
                Nhanvien.HeSoLuong = double.Parse(txtHesoluong.Text);
                Nhanvien.MaCV = cmbChucvu.SelectedValue.ToString();
                Nhanvien.NgayLamViec = DateTime.Parse(dtpNgaylamviec.Value.ToShortDateString());
                Nhanvien.SCMND = txtSoCMND.Text;
                Nhanvien.TrangThai = txtTrangthai.Text;
            }
            catch
            {
                XtraMessageBox.Show("Thông tin nhập vào bị lỗi hoặc không hợp lệ","Cảnh báo",MessageBoxButtons.OK);
            }
        }

        private void btnXoaCV_Click(object sender, EventArgs e)
        {
            Logger.Info("Tài khoản "+Commons.Current_.Username+" chọn thao tác xóa chức vụ");
            var list = new NhanVienManager().LayDanhSach().Result.Where(nv => nv.MaCV.Equals(cmbChucvu.SelectedValue)).ToList();
            if (list.Count > 0)
                XtraMessageBox.Show("Ràng buộc CSLD","Cảnh báo",MessageBoxButtons.OK,MessageBoxIcon.Warning);
            else
            {
                var action = new ActionResult();
                action = new ChucVuManager().Xoa(cmbChucvu.SelectedItem as Chucvu);
                if (action.Sucess())
                {
                    XtraMessageBox.Show("Xóa thành công", "Thông báo", MessageBoxButtons.OK);
                    LoadChucVu();
                }
                else
                    Logger.Info(action.Exceptions);
            }
        }

        private void btnThemCV_Click(object sender, EventArgs e)
        {
            Logger.Info("Tài khoản " + Commons.Current_.Username + " chọn thao tác thêm chức vụ");
            var frm = new FormChucVuCapNhat(0);
            frm.ShowDialog();
            if (frm.Success)
            {
                XtraMessageBox.Show("Thêm thành công", "Thông báo", MessageBoxButtons.OK);
                LoadChucVu();
                cmbChucvu.SelectedIndex = cmbChucvu.Items.Count - 1;
            }
        }

        private void btnCapnhatCV_Click(object sender, EventArgs e)
        {
            Logger.Info("Tài khoản " + Commons.Current_.Username + " chọn thao tác cập nhật chức vụ");
            var frm = new FormChucVuCapNhat(1, cmbChucvu.SelectedItem as Chucvu);
            frm.ShowDialog();
            if (frm.Success)
            {
                XtraMessageBox.Show("Cập nhật thành công", "Thông báo", MessageBoxButtons.OK);
                LoadChucVu();
                cmbChucvu.SelectedItem = frm.Chucvu;
            }
        }
    }
}
